// 把packages目录下所有包都进行打包

const fs = require('fs');
const execa = require('execa'); // 开启子进程进行打包，最终还是用rollup打包

// 扎到packages文件夹下的所有模块
// targets => ['reactivity', 'shared']
const targets = fs.readdirSync('packages').filter(f => {
    // 过滤掉文件,只保留文件夹
    if (!fs.statSync(`packages/${f}`).isDirectory()) { // 获取文件状态，判断是不是文件夹
        return false;
    } else {
        return true
    }
})

// 对目标进行一次打包，并行打包
async function build(target) {
    // execa参数说明： 相当于执行命令 => rollup -c --environment TARGET: reactivity  （跑rollup.config.js文件）
    // 1.执行命令 rollup  
    // 2.执行的参数：-c --environment TARGET:reactivity(表示要打包谁)  
    // 3.选项  stdio: 'inherit' 表示：子进程打包的信息共享给父进程
    return await execa('rollup', ['-c', '--environment', `TARGET:${target}`], {stdio: 'inherit'}); 
}

// 对模块进行并行打包
function runParallel(targets, iteratorFn) {
    const res = [];
    for (const item of targets) {
        const p = iteratorFn(item);
        res.push(p);
    }
    return Promise.all(res);
}

runParallel(targets, build); // 可以继续.then做其他处理
